package priv.conceit.sc.hoxton.file.handle.preview;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import priv.conceit.sc.hoxton.common.entity.file.dto.FilePathDTO;
import priv.conceit.sc.hoxton.common.entity.file.dto.FilePreviewDTO;
import priv.conceit.sc.hoxton.common.util.FileUtil;
import priv.conceit.sc.hoxton.common.util.IoUtil;
import priv.conceit.sc.hoxton.file.config.FileProperties;

import java.io.File;
import java.io.InputStream;

/**
 * sc-hoxton
 *
 * @author Conceit
 * @since 1.0.0, 2020/5/27
 */
public abstract class AbsPreviewHandle {

	@Autowired
	FileProperties fileProperties;

	/**
	 * 根据文件实体 将其处理为对应的文件预览类型
	 *
	 * @param filePathDTO 文件
	 * @param file 文件
	 * @return FilePreviewDTO 文件预览dto
	 * @author conceit
	 * @date 2020/5/15 21:21
	 */
	public abstract FilePreviewDTO preview(FilePathDTO filePathDTO, File file);

	/**
	 * 根据流对象 将其处理为对应的文件预览类型
	 *
	 * @param filePathDTO 文件路径信息
	 * @return inputStream 文件流
	 * @return FilePreviewDTO 文件预览dto
	 * @author conceit
	 * @date 2020/5/15 21:21
	 */
	public abstract FilePreviewDTO preview(FilePathDTO filePathDTO, InputStream inputStream);

	/**
	 * 获取本地的已转换的文件
	 *
	 * @param filePathDTO 文件路径信息
	 * @return FilePreviewDTO 文件预览dto
	 * @author conceit
	 * @date 2020/5/15 21:21
	 */
	public FilePreviewDTO getConvertTemp(FilePathDTO filePathDTO){
		String fileConvertedName= FileUtil.replaceFileSuffix(filePathDTO.getSavedFileName(),"pdf");
		File dir=new File(fileProperties.getConvertDir());
		if(!dir.exists()){
			return null;
		}
		for (File file:dir.listFiles()){
			if(file.getName().equals(fileConvertedName)){
				FilePreviewDTO filePreviewDTO=new FilePreviewDTO();
				filePreviewDTO.setBytes(IoUtil.toByteArrayUseFileChannel(file.getAbsoluteFile()));
				filePreviewDTO.setContentType(MediaType.APPLICATION_PDF_VALUE);
				return filePreviewDTO;
			}
		}
		return null;
	}


	/**
	 * 获取转换文件夹 如果不存在则自动创建
	 *
	 * @return 转换文件夹
	 * @author conceit
	 * @date 2020/5/15 21:21
	 */
	public File getConvertDir(){
		File convertDir=new File(fileProperties.getConvertDir());
		if(!convertDir.exists()){
			convertDir.mkdirs();
		}
		return convertDir;
	}

}
